<?php
/**
 ***** 扶摇而上、抱守本真 ******
 * @author Dana
 * @Date 2021/6/24
 */

class LogFile{

    protected $filename;
    protected $handle;

    public function __construct($filename)
    {
        $this->filename = $filename;
        $this->open();
    }

    private function open(){
        $this->handle = fopen($this->filename, 'a');
    }

    public function __destruct()
    {
        fclose($this->handle);
    }

    // 串行化对象时调用
    // 应当返回要串行话的对象属性的一个数组
    public function __sleep()
    {
        return array('filename');
    }

    // 逆串行话对象时调用
    public function __wakeup()
    {
        $this->open();
    }

}

// 串行化(serialize) 一个对象时,他会保留对象所有对象，但不包括保存外部资源的连接或句柄 如数据库，文件或redis web 服务

// 这些必须在 逆串行化对象时 重建，否则对象无法正常工作。

/*$res = new LogFile('test.puml');
$res = (serialize($res));
$res = unserialize($res);*/

// 对象映射
$res = Reflection::export(new ReflectionClass('logfile'),true);
echo $res;







